<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class cpListeMedias
{

	protected $core;
	public $params = array();
	
	# Filtres
	protected $dossier;
	protected $type;
	
	public $module;
	public $formExtras;
	
	public $url;
	public $lien_media;
	public $lien_dossier;
	
	public function __construct($core)
	{

		$this->core =& $core;
		
		# Filtres
		$this->type = 'ignorer';
		
		$this->html_prev = __('&#171;préc.');
		$this->html_next = __('suiv.&#187;');

		$this->module = 'medias';
		$this->formExtras = '';
		
		$this->url = 'index.php?module='.$this->module;
		$this->lien_media = 'index.php?module=modifierMedia&media_id=%s&ref=1';
		$this->lien_dossier = 'index.php?module=medias&dossier=%s';
		
	}
	
	public function filtres()
	{
		
		$this->params = array();

		# rechercher: Recherche de médias par mots-clés
		if(!empty($_GET['rechercher'])) {
			$this->params['rechercher'] = $this->rechercher = $_GET['rechercher'];
			$_GET['dossier'] = 'ignorer';
		}
		
		# type: Afficher les pages selon leur type
		if($_GET['type'] == 'image') {
			$this->params['media_type'] = array(
				'like' => array('image/%')
			);
			$this->type = 'image';
		} elseif($_GET['type'] == 'multimedia') {
			$this->params['media_type'] = array(
				'like' => array('audio/%', 'video/%'),
				'operateurLike' => 'OR',
				'=' => array('application/x-shockwave-flash'),
				'operateur' => 'OR'
			);
			$this->type = 'multimedia';
		} elseif($_GET['type'] == 'document') {
			$this->params['media_type'] = array(
				'like' => array('application/%'),
				'!=' => array('application/x-shockwave-flash'),
				'operateur' => 'AND'
			);
			$this->type = 'document';
		}

		# dossier: Afficher les médias d'un dossier en particulier
		if($_GET['dossier'] != 'ignorer')
		{

			if(empty($_GET['dossier']) || $_GET['dossier'] == '/') {
				$chemin_dossier = '/';
			} else {
				$chemin_dossier = path::clean('/'.$_GET['dossier']);
			}
			
			if(!is_dir(CP_CHEMIN_MEDIAS.'/'.$chemin_dossier)) {			
				http::redirect($this->url);
			}
			
			$_SESSION[CP_DERNIER_DOSSIER_MEDIAS_AFFICHE] = $chemin_dossier;
			$this->dossier = $this->core->site->getDossierMedias($chemin_dossier, $this->params);
			
			$this->params = array('media_dossier' => $chemin_dossier);
			
		}
		
		# Ordonner les résultats
		$this->params['order'] = 'media_fichier ASC';
		
	}
	
	public function afficherFiltres()
	{
		
		$url_liens_type = $this->url.'&dossier='.$this->dossier['media_dossier'].'&rechercher='.$this->rechercher.'&type=';
		
		$html=
		'<form id="filtres" class="filtres_tableau" action="index.php" method="GET">'.
		form::hidden('module', $this->module).
		$this->formExtras.
		'<p class="rechercher">'.
			form::field('rechercher', 30, 100, html::escapeHTML($this->rechercher)).
			'<input type="submit" value="'.__('Chercher dans les médias').'" />'.
		'</p>'.
		'<ul class="choix_horizontal">';
		
		$html.= ($this->type != 'ignorer') ?
			'<li><a href="'.$url_liens_type.'ignorer">'.__('Tout').'</a> |</li>' :
			'<li>'.__('Tout').' |</li>';
			
		$html.= ($this->type != 'image') ?
			'<li><a href="'.$url_liens_type.'image">'.__('Images').'</a> |</li>' :
			'<li>'.__('Images').' |</li>';
			
		$html.= ($this->type != 'multimedia') ?
			'<li><a href="'.$url_liens_type.'multimedia">'.__('Multimédia').'</a> |</li>' :
			'<li>'.__('Multimédia').' |</li>';
			
		$html.= ($this->type != 'document') ?
			'<li><a href="'.$url_liens_type.'document">'.__('Documents').'</a></li>' :
			'<li>'.__('Documents').'</li>';
			
		$html.=
		'</ul>'.
		'</form>';
		
		return $html;
		
	}
	
	public function afficherListe($page,$nb_par_page,$enclose_block='')
	{

		$html_block = '';
		
		if(!$this->dossierContexte())
		{
			
			$compteur = $this->getMedias(CP_GET_COMPTEUR);
		
			if ($compteur->f(0) == 0) {
				return '<div class="msg msgInfo">'.__('Pas de média').'</div>';
			}
			
			$pager = new pager($page,$compteur->f(0),$nb_par_page,10);
			$this->params['limit'] = array($pager->index_start,$nb_par_page);
			
			$affiche_medias = true;
			$affiche_dossiers = false;
		
		}
		else
		{

			$html_block.=$this->arborescence();
			
			$compteurPages = $this->getMedias(CP_GET_COMPTEUR)->f(0);
			$compteurDossiers = count($this->dossier['dirs']);
			
			if($compteurPages == 0 && $compteurDossiers == 0) {
				return $html_block.'<div class="msg msgInfo">'.__('Pas de média').'</div>';
			}
			
			$nb_elements = $compteurPages + $compteurDossiers;
			$pager = new pager($page,$nb_elements,$nb_par_page,10);
			
			$page = abs((integer) $page);
			$nb_pages = ceil($nb_elements/$nb_par_page);			
			if ($page > $nb_pages || $page < 1) {
				$page = 1;
			}
			
			$bornesDossiers = array(
				$pager->index_start,
				($pager->index_start + $nb_par_page) > $compteurDossiers ? $compteurDossiers-1 : $pager->index_start+$nb_par_page-1
			);
			
			$page_fin_dossiers = ceil($compteurDossiers / $nb_par_page);
			$page_fin_dossiers_nb_dossiers = $compteurDossiers % $nb_par_page;
			
			if($page == $page_fin_dossiers)
			{
				$this->params['limit'] = array($pager->index_start-$compteurDossiers+$page_fin_dossiers_nb_dossiers, $nb_par_page-$page_fin_dossiers_nb_dossiers);
				$affiche_dossiers = true;
				$affiche_medias = $this->params['limit'][0] < 0 ? false : true;
			}
			elseif($page < $page_fin_dossiers)
			{
				$affiche_dossiers = true;
				$affiche_medias = false;
			}
			else
			{
				$affiche_dossiers = false;
				$affiche_medias = true;
				$this->params['limit'] = array($pager->index_start-$compteurDossiers, $nb_par_page);
			}

		}
		
		$pager->html_prev = $this->html_prev;
		$pager->html_next = $this->html_next;
		$pager->var_page = 'page';
		
		$html_block .=
		'<div id="listeMedias">'.
			'%s'.
		'</div>';
		
		if ($enclose_block) {
			$html_block = sprintf($enclose_block,$html_block);
		}
		
		$blocks = explode('%s',$html_block);
			
		$html = $blocks[0];
		
		if($affiche_dossiers)
		{
			for($i=$bornesDossiers[0]; $i<=$bornesDossiers[1]; $i++)
			{
				$html.=$this->ligneDossier($this->dossier['dirs'][$i]);
			}	
		}
		
		if($affiche_medias)
		{
			
			$medias = $this->getMedias(CP_GET_STATIC);
			
			while($medias->fetch())
			{
				$html.=$this->ligneMedia($medias);
			}
			
		}
		
		$html.= $blocks[1].
		'<p class="options-liste">'.
			'<a href="#" id="selectionner_tout">'.__('sélectionner tout').'</a> - '.
			'<a href="#" id="inverser_selection">'.__('inverser la sélection').'</a>'.
		'</p>'.
		'<p class="pages">'.__('Page(s) :').' '.$pager->getLinks().'</p>';
		
		return $html;
	
	}
	
	public function dossierContexte()
	{
		return is_array($this->dossier);
	}
	
	public function getMedias($type)
	{
		return $this->core->site->getMedias($this->params, $type);
	}
	
	
	public function arborescence()
	{
		$href = $this->url.'&dossier=%s';
		
		$arborescence = explode('/', $this->dossier['media_dossier']);
		
		$html = 		
			'<p class="arborescence">'.
				'<a href="'.sprintf($href, '/').'" '.($this->dossier['media_dossier'] == '/' ? 'class="current"' : '').'>'.
					__('Médias').
				'</a>';
		
		$lienDossier = '';
			
		foreach($arborescence as $v)
		{	
			if($v != '')
			{
				$lienDossier.='/'.$v;

				$html.=
					'<a href="'.sprintf($href, html::escapeHTML($lienDossier)).'" '.($lienDossier == $this->dossier['media_dossier'] ? 'class="current"' : '').'>'.
						html::escapeHTML($v).
					'</a>';
			}
		}
		
		$html.=
			'</p>';
				
		return $html;
	}
	
	public function ligneMedia($media)
	{
		
		$disabled =
			$this->core->auth->verifierPermission('medias') &&
			( $media->utilisateur_id == $this->core->auth->getUtilisateurID() ||
			$this->core->auth->verifierPermission('tousMedias') ) ?
				false : true;
		
		return
		'<div class="media">'.
			form::checkbox('medias[]', $media->media_id, false, '', NULL, $disabled).
			'<img src="'.$media->icone().'" alt="'.html::escapeHTML($media->media_titre).'" />'.
			'<p class="media_titre"><a href="'.sprintf($this->lien_media, $media->media_id).'" media_id="'.$media->media_id.'" class="lienMedia">'.html::escapeHTML($media->media_titre).'</a></p>'.
			'<p class="media_fichier">'.html::escapeHTML($media->media_fichier).'</p>'.
		'</div>';
			
	}
	
	public function ligneDossier($dossier)
	{
		
		$disabled = $this->core->auth->verifierPermission('tousMedias') ? false : true;
		
		$path = '/'.$dossier->relname;
		
		return
		'<div class="media">'.
			form::checkbox('dossiersMedias[]', $path, false, '', NULL, $disabled).
			'<img src="images/64/dossier.png" alt="'.__('Dossier').'" />'.
			'<p class="media_titre"><a href="'.sprintf($this->lien_dossier, $dossier->file_url).'">'.html::escapeHTML($dossier->basename).'</a></p>'.
		'</div>';
		
	}
	
}

?>